package com.yqs.utils; // 定义了这个类属于com.yqs.utils包。

import com.alibaba.fastjson.JSON; // 导入阿里巴巴的fastjson库，用于JSON的序列化和反序列化。
import javax.servlet.http.HttpServletRequest; // 导入HttpServletRequest，用于访问客户端请求信息。
import javax.servlet.http.HttpServletResponse; // 导入HttpServletResponse，用于构造响应。
import java.io.IOException; // 导入IOException，处理可能发生的IO异常。
import java.io.PrintWriter; // 导入PrintWriter，用于向客户端发送字符文本。

/**
 * 作者：Ye QS
 * 版本：0.1
 * 类名：JsonUtil
 * 描述：这个类提供了将对象转换为JSON字符串并响应给客户端的功能。
 * 日期：2024/8/1 15:31
 * 依赖：jdk11
 */
public class JsonUtil {
    // 定义一个静态方法getJson，它接受HttpServletRequest和HttpServletResponse对象，以及需要转换为JSON的对象。
    public static void getJson(HttpServletRequest req, HttpServletResponse resp, Object obj) {
        // 设置响应的Content-Type为text/html，并指定字符集为UTF-8。
        resp.setContentType("text/html;charset=UTF-8");
        // 设置响应头，禁止缓存。
        resp.setHeader("Pragma", "No-cache");
        resp.setHeader("Cache-Control", "no-cache");
        resp.setDateHeader("Expires", -10); // 设置Expires响应头，使其立即过期。

        PrintWriter out = null; // 创建PrintWriter对象，用于向客户端输出。
        try {
            out = resp.getWriter(); // 获取PrintWriter对象。
            // 使用fastjson库的toJSONString方法将对象转换为JSON字符串。
            String s = JSON.toJSONString(obj);
            // 使用PrintWriter的print方法将JSON字符串输出到客户端。
            out.print(s);
        } catch (IOException e) { // 捕获并处理可能发生的IOException。
            throw new RuntimeException(e);
        } finally {
            // 使用assert断言确保out不为空，并关闭PrintWriter。
            assert out != null;
            out.close();
        }
    }
}